package kotlin05.src.main.java.com.example.kotlin05.s03

/**
 * 10.1 序列
 * generateSequence 函数接受一个初始种子值作为序列的起步值，在用generateSequence
 * 定义的序列上调用一个函数时，generateSequence函数会调用你指定的迭代器函数，决定
 * 下一个要产生的值。
 *
 * TODO： 案例：想产生限定数量下的前1000个素数
 * TODO： 案例：假定0-5000之内，可以找到1000个素数
 *
 *
 */

fun main() {

    //1.普通写法
    val takeList = (1..5000).toList()
        .filter { it.isPrime() }.take(1000)

//    println(takeList.size)

    //2.序列写法
    //找到1000个素数
    val generateSequencePrimes = generateSequence(2) { value ->
        value + 1
    }.filter { it.isPrime() }.take(1000)
    println(generateSequencePrimes.toList().size)


}

fun Int.isPrime() : Boolean{
    (2 until this).map {
        //判断是否被整除，整除不是素数，反之是素数
        if (this % it == 0)return false
    }
    return true

}


